其他
使用Python接口读取CSMAR数据
本文作者:张学人,武汉大学经济与管理学院
本文编辑:王子一
技术总编:张馨月
爬虫俱乐部云端课程
安装
pip install urllib3
pip install websocket
pip install websocket_client
pip install prettytable
pip install pkgname
的方式下载。请大家以官网下载包为准。在下载完毕后,将压缩包中的内容放于csmarapi
文件夹中,并将该文件夹放置于本地计算机python的site-package
文件夹中。如果使用者的Python是通过Anaconda一起安装的,那么文件树结构如下:Anaconda
|-pip
|-pkgs
|-etc
|-...
|-Library
|-libs
|-Lib
|-json
|-...
|-site-packages
|-...(其它第三方库)
|-csmarapi
|-__pycache__
|-__init__.py
|-config.ini
|-CsmarService.py
|-ReportUtil.py
|-UrlUtil.py
import csmarapi
,如果正常导入无报错,即说明安装成功。获取账号
获取基本信息
from csmarapi.CsmarService import CsmarService
from csmarapi.ReportUtil import ReportUtil
csmar = CsmarService()
csmar.login('134*****383', 'g*****9')
getListDbs()
查询已购买的数据库列表,返回值database
为json格式数据,为使输出结果美观,我们可以通过ReportUtil
函数将数据格式化输出(下同):database = csmar.getListDbs()
ReportUtil(database)
数据库名称
。+----------------------------------+------------+------------+
| databaseName | startTime | endTime |
+----------------------------------+------------+------------+
| CSMAR 中国上市公司财务中报数据库 | 1900-01-01 | 2018-09-25 |
| CSMAR 中国上市公司财务季报数据库 | 1900-01-01 | 2018-09-25 |
| CSMAR 中国上市公司财务年报数据库 | 1900-01-01 | 2018-09-25 |
| EVA专题 | 1900-01-01 | 2018-09-25 |
| Fama-French因子 | 1900-01-01 | 2018-09-25 |
| 上市公司与子公司专利 | 1900-01-01 | 2018-09-25 |
| 上市公司人物特征 | 1900-01-01 | 2018-09-25 |
| 上市公司研发创新 | 1900-01-01 | 2018-09-25 |
| ............... |
| 首次公开发行(A股) | 1800-10-01 | 2022-09-30 |
| 首次公开发行(B股) | 1800-10-01 | 2022-09-30 |
| 香港金融市场 | 1800-10-01 | 2022-09-30 |
| 黄金市场交易 | 1800-10-01 | 2022-09-30 |
+----------------------------------+------------+------------+
getListTables(databaseName)
查看数据库中的数据表,其中databaseName
为数据库名称
,数据库名称
可从上一步骤获取。与此同理,我们还可以通过getListFields(tableName)
查询某个数据表的字段信息。query
函数查询数据,例如我们从IPO_Cobasic
表中获取['Stkcd','Stknme','Regadd']
三项字段,时间设定为2010-01-01到2012-12-31。data = csmar.query(['Stkcd','Stknme','Regadd'], "", 'IPO_Cobasic','2010-01-01','2012-12-31')
ReportUtil(data)
"Stkcd='000001'"
,如果为空则表示查询全体数据。代码获得如下表格信息:+--------+----------+------------------------------------------------------------------------------------+
| Stkcd | Stknme | Regadd |
+--------+----------+------------------------------------------------------------------------------------+
| 300041 | 回天胶业 | 湖北省襄樊市国家高新技术开发区清河路33号 |
| 300037 | 新宙邦 | 深圳市龙岗区坪山沙坣同富裕工业区 |
| 300042 | 朗科科技 | 深圳市南山区高新区中国科技开发院孵化大楼六楼 |
| 300038 | 梅泰诺 | 北京市西城区新街口外大街28号主楼302室(德胜园区) |
| 300039 | 上海凯宝 | 上海市工业综合开发区沪杭公路1542号 |
| 300040 | 九洲电气 | 黑龙江省哈尔滨市南岗区哈平路162号 |
| 300043 | 星辉车模 | 汕头市澄海区广益街道登峰路广峰工业区14号厂房 |
| .....................................................................................................|
| 300356 | 光一科技 | 江苏省南京市江宁经济技术开发区胜太路88号 |
+--------+----------+------------------------------------------------------------------------------------+
getPackResultExt
函数。csmar.getPackResultExt(['Cuntrycd','Stkcd','Stknme','Conme'], "Stkcd like'3%'", 'TRD_Co','2010-01-01','2012-12-31')
c:\csmardata\zip\
路径下。Wed 09 Dec 2020 19:56:55 CsmarService.py INFO packaging return code:signCode=786320487244402688
Wed 09 Dec 2020 19:56:55 CsmarService.py INFO downloading...
|▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇|100%
Wed 09 Dec 2020 19:56:57 CsmarService.py INFO Package successfully. File size is:5.8KB
D:\Anaconda\lib\site-packages\urllib3\connectionpool.py:857: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
InsecureRequestWarning)
Wed 09 Dec 2020 19:56:57 CsmarService.py INFO Generate the local file path as :c:\csmardata\zip\786320487244402688.zip
将所获得数据转为DataFrame类型变量
import pandas as pd
import numpy as np
data = csmar.query(['Stkcd','Stknme','Regadd'], "Stkcd like'3%'", 'IPO_Cobasic','2010-01-01','2012-12-31')
df = pd.DataFrame(data)
df.head()
Regadd Stkcd Stknme
0 湖北省襄樊市国家高新技术开发区清河路33号 300041 回天胶业
1 深圳市龙岗区坪山沙坣同富裕工业区 300037 新宙邦
2 深圳市南山区高新区中国科技开发院孵化大楼六楼 300042 朗科科技
3 北京市西城区新街口外大街28号主楼302室(德胜园区) 300038 梅泰诺
4 上海市工业综合开发区沪杭公路1542号 300039 上海凯宝
如何获知每个表及其字段
getListDbs()
、getListTables(databaseName)
、getListFields(tableName)
三个接口函数分别查看数据库
、表
以及字段
的信息。那么,有没有其它获取这些信息的途径呢?getListDbs()
所提供的数据库名称与CSMAR官网的操作页面并不完全相和,因此如果我们需要知道目前账户拥有的数据库,则只能使用接口函数查看。getListTables(databaseName)
所显示的表名称亦为用户从CSMAR官网下载打包数据时获取的文件名称。因此用户可以查看以往自己下载的历史数据,即可知道所需要的数据的表名称。getListFields(tableName)
所提供的表的字段可以直接从CSMAR官网相应的表的字段
说明与样本数据
选单中查看。如下图:爬虫俱乐部开发的命令更新及常见问题说明
Seminar | 道德培训真的有用吗?
统计年鉴数据整理小技巧
Seminar | 作为飞行员,我比别的CEO多了什么?
利用TensorFlow构建前馈神经网络
推文合集(1)| Stata学习者必看的n篇推文!
Seminar | 诚信的价值
利用tushare获取股票数据及实现可视化
从Excel到Stata的“摆渡车”——import excel命令
光阴十载,见证了《经济研究》中的“高被引”
利用tushare获取股票数据
这些年,经管类C刊都在研究什么?
Seminar | 眼见为实吗?高管面部可信度、审计师任期与审计费用
Seminar | 恐怖袭击与CEO薪酬
代码补全,主题更换,Jupyter Notebook原来可以这样用?
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。